package org.water.sys.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.water.base.service.BaseService;
import org.water.base.support.BeanQuery;
import org.water.common.util.StringUtil;
import org.water.sys.entity.SysRole;
import org.water.sys.entity.SysRoleResource;
import org.water.sys.entity.SysUserRole;
import org.water.sys.repository.RoleDao;
import org.water.sys.repository.RoleResourceDao;

/**
 *角色服务
 * @author qzy
 *
 */


@Service
public class RoleService extends BaseService<SysRole,String> {

	/**
     * 用户dao
     * @return
     */
	protected RoleDao getRepository()
	{
		return (RoleDao) super.baseRespository;
	}
	@Autowired
	private RoleResourceDao roleResourceDao;
	/**
	 * 根据名称模糊查询
	 * @param name
	 * @param pageRequest
	 * @return
	 */
	public Page<SysRole> findByRoleName(String roleName,Pageable pageRequest)
	{
		Page<SysRole> roles=null;
		roles=getRepository().findByRoleNameLike(roleName, pageRequest);
		return roles;
	}
	/**
	 * 查询所有角色
	 * @param groupId
	 * @return
	 */
	public List<SysRole> findAllRole()
	{
		return getRepository().findAll();
	}
	/**
	 * 检查角色是否被用户使用
	 * @param userId
	 * @return true-被使用，false-未使用
	 */
	public Boolean haseRoleUseByUser(String roleId)
	{
		Boolean f=false;
		BeanQuery<SysUserRole> beanQuery=getRepository().createBeanQuery(SysUserRole.class).eq("roleId", roleId);
		Long rows=beanQuery.count();
		if(rows>0)
		{
			f=true;
		}
		return f;
	}
	/**
	 * 检查角色是否被用户使用
	 * @param userId
	 * @return true-被使用，false-未使用
	 */
	public Boolean haseRoleRelResource(String roleId)
	{
		Boolean f=false;
		BeanQuery<SysRoleResource> beanQuery=getRepository().createBeanQuery(SysRoleResource.class).eq("roleId", roleId);
		Long rows=beanQuery.count();
		if(rows>0)
		{
			f=true;
		}
		return f;
	}
	/**
	 * 角色关联资源
	 * @param roleId
	 * @param resourceIds
	 */
	public void relResource(String roleId,String[] resourceIds)
	{
		roleResourceDao.deleteByRoleId(roleId);
		for(String resourceId:resourceIds)
		{
			if(StringUtil.isEmpty(resourceId))
			{
				continue;
			}
			SysRoleResource bean=new SysRoleResource();
			bean.setRoleId(roleId);
			bean.setResourceId(resourceId);
			roleResourceDao.save(bean);
		}
	}
}
